package map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 *  Map遍历
 *  Map提供了三种遍历方式
 *  1.遍历所有的Key
 *  2.遍历每一组键值对儿
 *  3.遍历所有value(不常用)
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("数学",120);
        map.put("物理",90);
        map.put("语文",60);
        map.put("英语",30);
        map.put("化学",70);
        System.out.println(map);
        /*
            遍历所有的Key
            Set keySet()
            将当前Map中所有的key以一个Set集合形式返回.遍历该集合就等同于遍历了所有的kay
         */
        Set<String> keySet = map.keySet();
        for (String key : keySet){
            System.out.println("key:"+key);
        }

        /*
            遍历每一组键值对儿
            Set<Entry> entrySet()
            将当前Map中每一组键值对儿以一个Entry实例形式存入Set集合后返回
            java.util.Map.Entry
            Entry的每一个实例用于表示Map中的一组键值对,其中有两个常用方法:
            getKey()和getValue()
         */
//        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
//        for (Map.Entry<String,Integer> e : entrySet){
//            System.out.println(e.getKey()+":"+e.getValue());
//        }

        /*
            JDK8之后集合框架支持了使用lambda表达式遍历.因此Map和Collection都提供了foreach方法,通过lambda表达式遍历元素.
         */
        map.forEach(
                (k,v)->{
                    System.out.println(k+":"+v);
                }
        );

        /*
            遍历所有value
            Collection values()
            将当前Map中所有value以一个集合形式返回
         */
        Collection<Integer> values = map.values();
//        for (Integer i : values){
//            System.out.println(i);
//        }
        /*
            集合在使用forEach遍历时并不要求过程中不能通过集合的方法增删元素.
            而之前的迭代器则有此要求,否则可能在遍历过程中抛出异常.
         */
        values.forEach(i -> System.out.println("value:"+i));
    }
}